//
// BRDF.hpp for  in ~/Dropbox/Projets/raytracer-2016/Includes/BRDFs/
//
// Made by Jonathan
// Login   <ledey_l@epitech.net>
//
// Started on  Wed Sep 25 23:25:56 2013 Jonathan
// Last update Thu Sep 26 00:16:36 2013 Jonathan
//

#ifndef				BRDF_HPP_
# define			BRDF_HPP_

# include			"Maths/Color.hpp"
# include			"Maths/Vector.hpp"
# include			"Maths/ShadeRec.hpp"

namespace			BRDFs
{
  class				BRDF
  {
  private:

    protected:
    BRDF			&operator=(BRDF const &rOther);

  public:
    BRDF(void);
    BRDF(BRDF const &rOther);
    virtual ~BRDF(void);

    virtual BRDF		*Clone(void) const = 0;
    virtual Maths::Color	F(Maths::ShadeRec const &rShadeRec, Maths::Vector const &rWo, Maths::Vector const &rWi) const;
    virtual Maths::Color	SampleF(Maths::ShadeRec const &rShadeRec, Maths::Vector const &rWo, Maths::Vector &rWi) const;
    virtual Maths::Color	SampleF(Maths::ShadeRec const &rShadeRec, Maths::Vector const &rWo, Maths::Vector &rWi, long double &rPdf) const;
    virtual Maths::Color	Rho(Maths::ShadeRec const &rShadeRec, Maths::Vector const &rWo) const;
  };
};

#endif				/* BRDF_HPP_ */
